/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ferrocarril.objects;

import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author David Navarro M
 */
public class Grafo {
    
    private List<Arista> listAristas;
    private List<Nodo> listaNodo;

    public Grafo() {
        this.listAristas = new LinkedList<Arista>();
        this.listaNodo = new LinkedList<Nodo>();
    }
    
    public void addNodo(Nodo nodo) {
        if (findNodo(nodo.getNombre()) == null) {
            this.listaNodo.add(nodo);
        }
    }
    
    public Nodo findNodo(String nodoName) {
        for (Nodo nodo : listaNodo) {
            if (nodo.getNombre().equals(nodoName)) {
                return nodo;
            }
        }
        
        return null;
    }
    
    public Arista findArista(String nodoInicial, String nodoFinal) {
        for (Arista arista : listAristas) {
            if(arista.getInicio().getNombre().equals(nodoInicial) && arista.getFin().getNombre().equals(nodoFinal)){
                return arista;
            }
        }
        
        return null;
    }
    
    public List<Arista> findAristaEndsWith(Nodo fin) {
        List<Arista> aristas = null;
        
        for (Arista arista : listAristas) {
            if(arista.getFin().getNombre().equals(fin.getNombre())){
                if (aristas == null) {
                    aristas = new LinkedList<Arista>();
                }
                aristas.add(arista);
            }
        }
        
        return aristas;
    }
    
    public List<Arista> findAristaStartsWith(Nodo inicio) {
        List<Arista> aristas = null;
        
        for (Arista arista : listAristas) {
            if(arista.getInicio().getNombre().equals(inicio.getNombre())){
                if (aristas == null) {
                    aristas = new LinkedList<Arista>();
                }
                aristas.add(arista);
            }
        }
        
        return aristas;
    }
    
    public List<Arista> getListAristas() {
        return listAristas;
    }

    public void setListAristas(List<Arista> listAristas) {
        this.listAristas = listAristas;
    }

    public List<Nodo> getListaNodo() {
        return listaNodo;
    }

    public void setListaNodo(List<Nodo> listaNodo) {
        this.listaNodo = listaNodo;
    }
    
}
